package com.jprocms.module.cms.dal.dataobject.accesslog;

import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.jpro.framework.tenant.core.db.TenantBaseDO;
import lombok.*;

import java.time.LocalDateTime;

import static com.jprocms.module.cms.constant.CmsSysConstants.BATCH_SIZE;

/**
 * 访问日志 DO
 *
 * @author jprocms
 */
@TableName("cms_access_log")
@KeySequence("cms_access_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AccessLogDO extends TenantBaseDO {

    /**
     * ID
     */
    @TableId
    private Long id;
    /**
     * 站点ID
     */
    private Long siteId;
    /**
     * 用户ID
     */
    private Long userId;
    /**
     * URL地址
     */
    private String accessUrl;
    /**
     * 入口URL地址
     */
    private String entryUrl;
    /**
     * 来源
     */
    private String accessSource;
    /**
     * 国家
     */
    private String accessCountry;
    /**
     * 省份
     */
    private String accessProvince;
    /**
     * 设备
     */
    private String accessDevice;
    /**
     * 操作系统
     */
    private String accessOs;
    /**
     * 浏览器
     */
    private String accessBrowser;
    /**
     * 用户代理
     */
    private String accessUserAgent;
    /**
     * 访问次数
     */
    private Integer accessCount;
    /**
     * 会话标识
     */
    private Long accessSessionId;
    /**
     * 访客标识
     */
    private Long accessUv;
    /**
     * IP地址
     */
    private String accessIp;
    /**
     * 访问日期
     */
    private LocalDateTime accessDate;
    /**
     * 访问时长
     */
    private Integer accessDuration;
    /**
     * 是否新访客
     */
    private Boolean newVisitor;
    /**
     * 来源类型(DIRECT:直接访问,INNER:内部链接,OUTER:外部链接,SEARCH:搜索引擎)
     */
    private String sourceType;

    /**
     * 多租户编号
     */
    private Long tenantId;

    public static final int FOREACH_SIZE = 1;
    /**
     * 缓存条数
     */
    public static final int CACHE_SIZE = FOREACH_SIZE * BATCH_SIZE;
    /**
     * 数据最多保留天数
     */
    public static final int DATA_MAX_DAY = 3;

}
